初版(当数值大时,不可用!)
程序中使用递归的方式计算阶乘,每次调用fact()函数时,会将n减1,并将n与递归返回值相乘。当n较大时,这种递归方式会导致栈空间占用过多,从而引发栈溢出的错误。
#include
long long fact(int n){
if(n==1 || n==0) return 1;
return (long long)n * fact(n-1);
}
int main()
{
int n;
scanf("%d", &n);
printf("%lld",fact(n));
return 0;
}
进阶版
程序中使用递归的方式计算阶乘,每次调用fact()函数时,会将n减1,并将n与递归返回值相乘。当n较大时,这种递归方式会导致栈空间占用过多,从而引发栈溢出的错误。
#include
#include
#define MAXN 1000
void pnext(int a[], int k)
{
int *b, m = a[0];
int i, j, r, carry;
b = (int *)malloc(sizeof(int) * (m + 1));
for(i = 1; i 0 && res.num[res.len] == 0) {
res.len--;
}
res.len++;
return res;
}
// 重载输出运算符
friend ostream& operator |